<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>

    /* let 声明会生成块级作用域 */
    // 什么是作用域？
    //  变量生效的区域，范围
    // 在 es6 之前，javascript里面的作用域：1. 全局作用域 2. 局部作用域（函数作用域）

    // 在Windows全局声明的变量是属于全局作用域，在任何地方都可以使用
    // 1. 全局使用 2. 局部使用（函数内部）
    var a = 12;

    // 局部作用域（函数作用域）
    function mlog() {
        /* msg 局部变量 只能在函数内部使用 */
        var msg = '我是log内部的msg';
        console.log(msg, a); // a?

    }

    mlog();

    // console.log(msg); //?

    // 在 es 6 里面引入 块级作用域，作用域之间彼此独立。
    {
        // 一个花括号就是一个作用域
        // 在这个作用域里面使用 let 声明的变量只能在该作用域内部使用
        let name = '块1'
        console.log(name);
        {
            // 块级作用域也支持嵌套，也遵循作用域链的查找规则，使用变量的时候，先在自己的块
            // 里面查找，如果有则使用，没有则沿着外层查找，找到就用。
            // let name = '块3';
            console.log(name);

        }


    }

    {
        let name = '块2';
        console.log(name);

    }





</script>

</html>